package com.persistence.dao.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.model.Actividad;
import com.persistence.dao.DAOException;
import com.persistence.dao.DAOManagerMain;
import com.persistence.dao.interfaces.DAOActividad;

public class MySQLDAOActividad implements DAOActividad {
	
	private Actividad actividad = null;
	
	
	public MySQLDAOActividad() {
	}

	public int insert(Actividad actividad) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection.prepareStatement("insert into Actividad ("
					+ "Id_Actividad, Nombre, descripcion, "
					+ "tiempominimo, tiempomaximo, "
					+ "nivelRiezgo) " + "values (?, ?, ?, ?, ?, ?) ");

			stmt.setLong(1, actividad.getNroActividad());
			stmt.setString(2, actividad.getNombre());
			stmt.setString(3, actividad.getDescripcion());
			stmt.setString(4, actividad.getTiempominimo());
			stmt.setString(5, actividad.getTiempomaximo());
			stmt.setLong(6, actividad.getNivelriezgo());
			stmt.executeUpdate();
			
			return 1;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);

		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	public int update(Actividad actividad) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection
					.prepareStatement("update Actividad " 
							+ "set nombre = ?, descripcion = ?, tiempoMinimo = ?"
							+ "set tiempoMaximo = ?, nivelRiezgo = ?"							
							+ " where id_Actividad = ? ");

			stmt.setString(1, actividad.getNombre());
         stmt.setString(2, actividad.getDescripcion());
         stmt.setString(3, actividad.getTiempominimo());
         stmt.setString(4, actividad.getTiempomaximo());
         stmt.setLong(5, actividad.getNivelriezgo());
         stmt.executeUpdate();
			return 1;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	public int eliminate(Actividad actividad) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection
					.prepareStatement("delete from Actividad where id_Actividad = ? ");
			stmt.setLong(1, actividad.getNroActividad());

			stmt.executeUpdate();
			return 1;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	public ArrayList<Actividad> select() throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;
		ArrayList<Actividad> actividades = new ArrayList<Actividad>();

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection.prepareStatement("select * from Actividad");
			rs = stmt.executeQuery();

			while (rs.next()) {
				Actividad actividad = new Actividad();
				actividad.setNroActividad(rs.getInt("Id_Actividad"));
				actividad.setNombre(rs.getString("nombre"));
				actividad.setDescripcion(rs.getString("descripcion"));
				actividad.setTiempominimo(rs.getString("tiempoMinimo"));
				actividad.setTiempomaximo(rs.getString("tiempoMaximo"));
				actividad.setNivelriezgo(rs.getInt("nivelRiesgo"));

				actividades.add(actividad);
			}

			return actividades;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	public Actividad findById(int id) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;
		actividad = new Actividad();

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection
					.prepareStatement("select * from Actividad where Id_Actividad = ?");
			stmt.setLong(1, id);
			rs = stmt.executeQuery();

			if (rs.next()) {
            actividad.setNroActividad(rs.getInt("Id_Actividad"));
            actividad.setNombre(rs.getString("nombre"));
            actividad.setDescripcion(rs.getString("descripcion"));
            actividad.setTiempominimo(rs.getString("tiempoMinimo"));
            actividad.setTiempomaximo(rs.getString("tiempoMaximo"));
            actividad.setNivelriezgo(rs.getInt("nivelRiesgo"));
			}

			return actividad;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}

	@Override
	public boolean existInstance(Actividad actividad) throws DAOException {
		Connection connection = null;
		ResultSet rs = null;
		PreparedStatement stmt = null;
		boolean result = false;

		try {
			connection = DAOManagerMain.manager().getConnection();
			stmt = connection
					.prepareStatement("select * from Actividad where UCASE(Nombre) = ?");

			stmt.setString(1, actividad.getNombre().toUpperCase());
         stmt.setString(2, actividad.getDescripcion().toUpperCase());
			rs = stmt.executeQuery();

			if (rs.next()) {
				result = true;
			}

			return result;
		} catch (SQLException sqle) {
			throw new DAOException(sqle);
		} finally {
			DAOManagerMain.manager().closeAll(connection, stmt, rs);
		}
	}
}
